Trò chơi Tic-Tac-Toe, game đánh caro full source code
- WorkerMenu.cs
- Scripts /
- DemoWorker /
- Demos /
- Photon Unity Networking /
- Assets /
- project /
2 // <copyright file="WorkerMenu.cs" company="Exit Games GmbH">
3 // Part of: Photon Unity Networking
4 // </copyright>
5 // --------------------------------------------------------------------------------------------------------------------
6
7 using System;
8 using UnityEngine;
9 using Random = UnityEngine.Random;
10
11 public class WorkerMenu : MonoBehaviour
12 {
13 public GUISkin Skin;
14 public Vector2 WidthAndHeight = new Vector2(600,400);
15 private string roomName = "myRoom";
16
17 private Vector2 scrollPos = Vector2.zero;
18
19 private bool connectFailed = false;
20
21 public static readonly string SceneNameMenu = "DemoWorker-Scene";
22
23 public static readonly string SceneNameGame = "DemoWorkerGame-Scene";
24
25 private string errorDialog;
26 private double timeToClearDialog;
27 public string ErrorDialog
28 {
29 get
30 {
31 return errorDialog;
32 }
33 private set
34 {
35 errorDialog = value;
36 if (!string.IsNullOrEmpty(value))
37 {
38 timeToClearDialog = Time.time + 4.0f;
39 }
40 }
41 }
42
43 public void Awake()
44 {
45 // this makes sure we can use PhotonNetwork.LoadLevel() on the master client and all clients in the same room sync their level automatically
46 PhotonNetwork.automaticallySyncScene = true;
47
48 // the following line checks if this client was just created (and not yet online). if so, we connect
49 if (PhotonNetwork.connectionStateDetailed == PeerState.PeerCreated)
50 {
51 // Connect to the photon master-server. We use the settings saved in PhotonServerSettings (a .asset file in this project)
52 PhotonNetwork.ConnectUsingSettings("0.9");
53 }
54
55 // generate a name for this player, if none is assigned yet
56 if (String.IsNullOrEmpty(PhotonNetwork.playerName))
57 {
58 PhotonNetwork.playerName = "Guest" + Random.Range(1, 9999);
59 }
60
61 // if you wanted more debug out, turn this on:
62 // PhotonNetwork.logLevel = NetworkLogLevel.Full;
63 }
64
65 public void OnGUI()
66 {
67 if (this.Skin != null)
68 {
69 GUI.skin = this.Skin;
70 }
71
72 if (!PhotonNetwork.connected)
73 {
74 if (PhotonNetwork.connecting)
75 {
76 GUILayout.Label("Connecting to: " + PhotonNetwork.ServerAddress);
77 }
78 else
79 {
80 GUILayout.Label("Not connected. Check console output. Detailed connection state: " + PhotonNetwork.connectionStateDetailed + " Server: " + PhotonNetwork.ServerAddress);
81 }
82
83 if (this.connectFailed)
84 {
85 GUILayout.Label("Connection failed. Check setup and use Setup Wizard to fix configuration.");
86 GUILayout.Label(String.Format("Server: {0}", new object[] {PhotonNetwork.ServerAddress}));
87 GUILayout.Label("AppId: " + PhotonNetwork.PhotonServerSettings.AppID);
88
89 if (GUILayout.Button("Try Again", GUILayout.Width(100)))
90 {
91 this.connectFailed = false;
92 PhotonNetwork.ConnectUsingSettings("0.9");
93 }
94 }
95
96 return;
97 }
98
99 Rect content = new Rect((Screen.width - WidthAndHeight.x)/2, (Screen.height - WidthAndHeight.y)/2, WidthAndHeight.x, WidthAndHeight.y);
100 GUI.Box(content,"Join or Create Room");
101 GUILayout.BeginArea(content);
102
103 GUILayout.Space(40);
104
105 // Player name
106 GUILayout.BeginHorizontal();
107 GUILayout.Label("Player name:", GUILayout.Width(150));
108 PhotonNetwork.playerName = GUILayout.TextField(PhotonNetwork.playerName);
109 GUILayout.Space(158);
110 if (GUI.changed)
111 {
112 // Save name
113 PlayerPrefs.SetString("playerName", PhotonNetwork.playerName);
114 }
115 GUILayout.EndHorizontal();
116
117 GUILayout.Space(15);
118
119 // Join room by title
120 GUILayout.BeginHorizontal();
121 GUILayout.Label("Roomname:", GUILayout.Width(150));
122 this.roomName = GUILayout.TextField(this.roomName);
123
124 if (GUILayout.Button("Create Room", GUILayout.Width(150)))
125 {
126 PhotonNetwork.CreateRoom(this.roomName, new RoomOptions() { maxPlayers = 10 }, null);
127 }
128
129 GUILayout.EndHorizontal();
130
131 // Create a room (fails if exist!)
132 GUILayout.BeginHorizontal();
133 GUILayout.FlexibleSpace();
134 //this.roomName = GUILayout.TextField(this.roomName);
135 if (GUILayout.Button("Join Room", GUILayout.Width(150)))
136 {
137 PhotonNetwork.JoinRoom(this.roomName);
138 }
139
140 GUILayout.EndHorizontal();
141
142
143 if (!string.IsNullOrEmpty(this.ErrorDialog))
144 {
145 GUILayout.Label(this.ErrorDialog);
146
147 if (timeToClearDialog < Time.time)
148 {
149 timeToClearDialog = 0;
150 this.ErrorDialog = "";
151 }
152 }
153
154 GUILayout.Space(15);
155
156 // Join random room
157 GUILayout.BeginHorizontal();
158
159 GUILayout.Label(PhotonNetwork.countOfPlayers + " users are online in " + PhotonNetwork.countOfRooms + " rooms.");
160 GUILayout.FlexibleSpace();
161 if (GUILayout.Button("Join Random", GUILayout.Width(150)))
162 {
163 PhotonNetwork.JoinRandomRoom();
164 }
165
166
167 GUILayout.EndHorizontal();
168
169 GUILayout.Space(15);
170 if (PhotonNetwork.GetRoomList().Length == 0)
171 {
172 GUILayout.Label("Currently no games are available.");
173 GUILayout.Label("Rooms will be listed here, when they become available.");
174 }
175 else
176 {
177 GUILayout.Label(PhotonNetwork.GetRoomList().Length + " rooms available:");
178
179 // Room listing: simply call GetRoomList: no need to fetch/poll whatever!
180 this.scrollPos = GUILayout.BeginScrollView(this.scrollPos);
181 foreach (RoomInfo roomInfo in PhotonNetwork.GetRoomList())
182 {
183 GUILayout.BeginHorizontal();
184 GUILayout.Label(roomInfo.name + " " + roomInfo.playerCount + "/" + roomInfo.maxPlayers);
185 if (GUILayout.Button("Join", GUILayout.Width(150)))
186 {
187 PhotonNetwork.JoinRoom(roomInfo.name);
188 }
189
190 GUILayout.EndHorizontal();
191 }
192
193 GUILayout.EndScrollView();
194 }
195
196 GUILayout.EndArea();
197 }
198
199 // We have two options here: we either joined(by title, list or random) or created a room.
200 public void OnJoinedRoom()
201 {
202 Debug.Log("OnJoinedRoom");
203 }
204
205
206 public void OnPhotonCreateRoomFailed()
207 {
208 this.ErrorDialog = "Error: Can't create room (room name maybe already used).";
209 Debug.Log("OnPhotonCreateRoomFailed got called. This can happen if the room exists (even if not visible). Try another room name.");
210 }
211
212 public void OnPhotonJoinRoomFailed()
213 {
214 this.ErrorDialog = "Error: Can't join room (full or unknown room name).";
215 Debug.Log("OnPhotonJoinRoomFailed got called. This can happen if the room is not existing or full or closed.");
216 }
217 public void OnPhotonRandomJoinFailed()
218 {
219 this.ErrorDialog = "Error: Can't join random room (none found).";
220 Debug.Log("OnPhotonRandomJoinFailed got called. Happens if no room is available (or all full or invisible or closed). JoinrRandom filter-options can limit available rooms.");
221 }
222
223 public void OnCreatedRoom()
224 {
225 Debug.Log("OnCreatedRoom");
226 PhotonNetwork.LoadLevel(SceneNameGame);
227 }
228
229 public void OnDisconnectedFromPhoton()
230 {
231 Debug.Log("Disconnected from Photon.");
232 }
233
234 public void OnFailedToConnectToPhoton(object parameters)
235 {
236 this.connectFailed = true;
237 Debug.Log("OnFailedToConnectToPhoton. StatusCode: " + parameters + " ServerAddress: " + PhotonNetwork.networkingPeer.ServerAddress);
238 }
239 }
--------------------------------------------------------------------------------------------------------------------
Part of: Photon Unity Networking
--------------------------------------------------------------------------------------------------------------------
this makes sure we can use PhotonNetwork.LoadLevel() on the master client and all clients in the same room sync their level automatically
the following line checks if this client was just created (and not yet online). if so, we connect
Connect to the photon master-server. We use the settings saved in PhotonServerSettings (a .asset file in this project)
generate a name for this player, if none is assigned yet
if you wanted more debug out, turn this on:
PhotonNetwork.logLevel = NetworkLogLevel.Full;
Player name
Save name
Join room by title
Create a room (fails if exist!)
this.roomName = GUILayout.TextField(this.roomName);
Join random room
Room listing: simply call GetRoomList: no need to fetchpoll whatever!
We have two options here: we either joined(by title, list or random) or created a room.